#include <stdio.h>
#include <stdlib.h>
#include "Node.h"


// 创建新节点
Node* createNode(int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->left = NULL;
    newNode->right = NULL;
    return newNode;
}

Node* createNodewithValue(int data, float value) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->value = value;
    newNode->left = NULL;
    newNode->right = NULL;
    return newNode;
}

// 带值插入节点
Node* insertNodewithValue(Node* root, int data, float value) {
    if (root == NULL) {
        return createNodewithValue(data, value);
    } else {
        if (value <= root->value) {
            root->left = insertNodewithValue(root->left, data, value);
        } else {
            root->right = insertNodewithValue(root->right, data, value);
        }
        return root;
    }
}

// 插入节点
Node* insertNode(Node* root, int data) {
    if (root == NULL) {
        return createNode(data);
    } else {
        if (data <= root->data) {
            root->left = insertNode(root->left, data);
        } else {
            root->right = insertNode(root->right, data);
        }
        return root;
    }
}

// 前序遍历
void preOrderTraversal(Node* root) {
    if (root != NULL) {
        printf("%d ", root->data);
        preOrderTraversal(root->left);
        preOrderTraversal(root->right);
    }
}

// 中序遍历
void inOrderTraversal(Node* root) {
    if (root != NULL) {
        inOrderTraversal(root->left);
        printf("%d ", root->data);
        inOrderTraversal(root->right);
    }
}

// 中序遍历
void inOrderTraversalwithValue(Node* root, int* res, int* idx) {
    if (root != NULL) {
        inOrderTraversalwithValue(root->left, res, idx);
        // printf("%d:%f \n", root->data,root->value, idx);
        res[idx[0]++] = root->data;
        inOrderTraversalwithValue(root->right, res, idx);
    }
}

// 后序遍历
void postOrderTraversal(Node* root) {
    if (root != NULL) {
        postOrderTraversal(root->left);
        postOrderTraversal(root->right);
        printf("%d ", root->data);
    }
}

// int main() {
//     Node* root = NULL;
//     root = insertNode(root, 50);
//     root = insertNode(root, 30);
//     root = insertNode(root, 20);
//     root = insertNode(root, 40);
//     root = insertNode(root, 70);
//     root = insertNode(root, 60);
//     root = insertNode(root, 80);
    
//     printf("前序遍历结果：");
//     preOrderTraversal(root);
//     printf("\n");
    
//     printf("中序遍历结果：");
//     inOrderTraversal(root);
//     printf("\n");
    
//     printf("后序遍历结果：");
//     postOrderTraversal(root);
//     printf("\n");
    
//     return 0;
// }